#include "stm32g4xx_hal.h"
#include "main.h"
#include "gpio.h"

#define WK_UP_Pin GPIO_PIN_0
#define WK_UP_GPIO_Port GPIOA

#define KEY1_Pin GPIO_PIN_1
#define KEY1_GPIO_Port GPIOB

#define KEY2_Pin GPIO_PIN_2
#define KEY2_GPIO_Port GPIOB


#define WK_UP HAL_GPIO_ReadPin(WK_UP_GPIO_Port,WK_UP_Pin)

#define KEY2 HAL_GPIO_ReadPin(KEY2_GPIO_Port,KEY2_Pin)

#define KEY1 HAL_GPIO_ReadPin(KEY1_GPIO_Port,KEY1_Pin)

#define KEY2_PRES		2 
#define KEY1_PRES		3
#define WK_UP_PRES	1


void Key_Init(void)
{
	
  GPIO_InitTypeDef GPIO_InitStruct = {0};
  __HAL_RCC_GPIOA_CLK_ENABLE();
  __HAL_RCC_GPIOB_CLK_ENABLE();
	
	HAL_GPIO_WritePin(KEY1_GPIO_Port, KEY1_Pin, GPIO_PIN_SET);
	HAL_GPIO_WritePin(KEY2_GPIO_Port, KEY2_Pin, GPIO_PIN_SET);
	HAL_GPIO_WritePin(WK_UP_GPIO_Port, WK_UP_Pin, GPIO_PIN_RESET);

	//KEY1
  GPIO_InitStruct.Pin = KEY1_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY1_GPIO_Port, &GPIO_InitStruct);

	//KEY2
  GPIO_InitStruct.Pin = KEY2_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLUP;
  HAL_GPIO_Init(KEY2_GPIO_Port, &GPIO_InitStruct);	
	
	//KEY3
  GPIO_InitStruct.Pin = WK_UP_Pin;
  GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
  GPIO_InitStruct.Pull = GPIO_PULLDOWN;
  HAL_GPIO_Init(WK_UP_GPIO_Port, &GPIO_InitStruct);
}

uint8_t KEY_Scan(uint8_t mode)
{
    static uint8_t key_up=1;
    if(mode==1)key_up=1;
    if(key_up&&(KEY2==GPIO_PIN_RESET||WK_UP==GPIO_PIN_SET||KEY1==GPIO_PIN_RESET))
    {
        HAL_Delay(5);
        key_up=0;
        if(KEY2==GPIO_PIN_RESET)       return KEY2_PRES;
        else if(WK_UP==GPIO_PIN_SET) return WK_UP_PRES; 
				else if(KEY1==GPIO_PIN_RESET) return KEY1_PRES;			
    }
		else
		{			
			if(KEY2==GPIO_PIN_SET&&WK_UP==GPIO_PIN_RESET&&KEY1==GPIO_PIN_SET)
				key_up=1;
		}
    return 0;
}

//unsigned char Key_GetNum(void)
//{
//	uint8_t KeyNum = 0;
//	if (HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_PIN)==GPIO_PIN_RESET)
//	{
//		HAL_Delay(50);
//		while (HAL_GPIO_ReadPin(KEY1_GPIO,KEY1_PIN)==GPIO_PIN_RESET);
//		HAL_Delay(50);
//		KeyNum = 1;
//	}
//	if (HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_PIN)==GPIO_PIN_RESET)
//	{
//		HAL_Delay(50);
//		while (HAL_GPIO_ReadPin(KEY2_GPIO,KEY2_PIN)==GPIO_PIN_RESET);
//		HAL_Delay(50);
//		KeyNum = 2;
//	}
//	if (HAL_GPIO_ReadPin(KEY3_GPIO,KEY3_PIN)==GPIO_PIN_SET)
//	{
//		HAL_Delay(50);
//		while (HAL_GPIO_ReadPin(KEY3_GPIO,KEY3_PIN)==GPIO_PIN_SET);
//		HAL_Delay(50);
//		KeyNum = 3;
//	}
//	
//	return KeyNum;
//}
